package com.xbongbong.paas.enums;

import com.xbongbong.saas.enums.SelectProductEnum;
import com.xbongbong.saas.enums.XbbRefTypeEnum;
import com.xbongbong.saas.enums.product.*;
import lombok.Getter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
 * @author lee
 * @version v1.0
 * @date 2019/11/10 11:13
 * @since v1.0
 */
@Getter
public enum RelativeProductImportEnum {

    /**
     * 导出相关
     */
    EXPORT_CONTRACT_PRODUCT(XbbRefTypeEnum.CONTRACT.getCode(), Arrays.asList(ContractProductEnum.PRICE.getAttr(),ContractProductEnum.DISCOUNT.getAttr(),ContractProductEnum.SELLING_PRICE.getAttr(),ContractProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), ContractProductEnum.SUBTOTAL.getAttr(),ContractProductEnum.MEMO.getAttr(),ContractProductEnum.OUTSTOCK_NUM.getAttr(),ContractProductEnum.WAIT_OUTSTOCK_NUM.getAttr(),ContractProductEnum.RETURN_NUM.getAttr()), 2),
    // 目前订单产品和合同产品一致，以后如果有不一致的话这里要分开
    EXPORT_ORDER_PRODUCT(XbbRefTypeEnum.ORDER.getCode(), Arrays.asList(ContractProductEnum.PRICE.getAttr(),ContractProductEnum.DISCOUNT.getAttr(),ContractProductEnum.SELLING_PRICE.getAttr(),ContractProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), ContractProductEnum.SUBTOTAL.getAttr(),ContractProductEnum.MEMO.getAttr(),ContractProductEnum.OUTSTOCK_NUM.getAttr(),ContractProductEnum.WAIT_OUTSTOCK_NUM.getAttr(),ContractProductEnum.RETURN_NUM.getAttr()), 2),
    EXPORT_OPPORTUNITY_PRODUCT(XbbRefTypeEnum.SALES_OPPORTUNITY.getCode(), Arrays.asList(OpportunityProductEnum.PRICE.getAttr(),OpportunityProductEnum.DISCOUNT.getAttr(),OpportunityProductEnum.SELLING_PRICE.getAttr(),OpportunityProductEnum.NUM.getAttr(),SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(),OpportunityProductEnum.SELL_TOTAL.getAttr(),OpportunityProductEnum.MEMO.getAttr()), 2),
    EXPORT_QUOTATION_PRODUCT(XbbRefTypeEnum.QUOTATION.getCode(), Arrays.asList(QuotationProductEnum.PRICE.getAttr(),QuotationProductEnum.DISCOUNT.getAttr(),QuotationProductEnum.SELLING_PRICE.getAttr(),QuotationProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), QuotationProductEnum.SUBTOTAL.getAttr(),QuotationProductEnum.MEMO.getAttr()), 2),
    EXPORT_PURCHASE_PRODUCT(XbbRefTypeEnum.PURCHASE.getCode(), Arrays.asList(PurchaseProductEnum.PURCHASE_PRICE.getAttr(),PurchaseProductEnum.NUM.getAttr(),  SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), PurchaseProductEnum.SUBTOTAL.getAttr(),PurchaseProductEnum.MEMO.getAttr(),PurchaseProductEnum.INSTOCK_NUM.getAttr(),PurchaseProductEnum.WAIT_INSTOCK_NUM.getAttr(),PurchaseProductEnum.RETURN_NUM.getAttr()), 2),
    EXPORT_REFUND_PRODUCT(XbbRefTypeEnum.REFUND.getCode(), Arrays.asList(RefundProductEnum.SOURCE_DOC.getAttr(),RefundProductEnum.NUM.getAttr(),  SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), RefundProductEnum.PRICE.getAttr(),RefundProductEnum.SUBTOTAL.getAttr(),RefundProductEnum.MEMO.getAttr(),RefundProductEnum.INSTOCK_NUM.getAttr(),RefundProductEnum.WAIT_INSTOCK_NUM.getAttr(),RefundProductEnum.BATCH.getAttr(),RefundProductEnum.GUARANTEE_PERIOD.getAttr(),RefundProductEnum.PRODUCE_DATE.getAttr(),RefundProductEnum.EXPIRE_DATE.getAttr(), RefundProductEnum.COST.getAttr()), 2),
    EXPORT_RETURN_PRODUCT(XbbRefTypeEnum.RETURN.getCode(), Arrays.asList(RefundProductEnum.NUM.getAttr(),  SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), RefundProductEnum.PRICE.getAttr(),RefundProductEnum.SUBTOTAL.getAttr(),RefundProductEnum.MEMO.getAttr(),RefundProductEnum.INSTOCK_NUM.getAttr(),RefundProductEnum.WAIT_INSTOCK_NUM.getAttr(),RefundProductEnum.BATCH.getAttr(),RefundProductEnum.GUARANTEE_PERIOD.getAttr(),RefundProductEnum.PRODUCE_DATE.getAttr(),RefundProductEnum.EXPIRE_DATE.getAttr(), RefundProductEnum.COST.getAttr()), 2),
    EXPORT_RETURNED_PURCHASE_PRODUCT(XbbRefTypeEnum.RETURNED_PURCHASE.getCode(), Arrays.asList(ReturnPurchaseProductEnum.NUM.getAttr(),  SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), ReturnPurchaseProductEnum.PURCHASE_PRICE.getAttr(),ReturnPurchaseProductEnum.SUBTOTAL.getAttr(),ReturnPurchaseProductEnum.MEMO.getAttr(),ReturnPurchaseProductEnum.OUTSTOCK_NUM.getAttr(),ReturnPurchaseProductEnum.WAIT_OUTSTOCK_NUM.getAttr(),ReturnPurchaseProductEnum.BATCH.getAttr(),ReturnPurchaseProductEnum.GUARANTEE_PERIOD.getAttr(),ReturnPurchaseProductEnum.PRODUCE_DATE.getAttr(),ReturnPurchaseProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_WORK_ORDER_PRODUCT(XbbRefTypeEnum.WORK_ORDER.getCode(), Arrays.asList(WorkOrderProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), WorkOrderProductEnum.OUTSTOCK_NUM.getAttr(),WorkOrderProductEnum.WAIT_OUTSTOCK_NUM.getAttr(),WorkOrderProductEnum.MEMO.getAttr()), 2),
    EXPORT_PRODUCTION_ORDER_MATERIAL_PRODUCT(XbbRefTypeEnum.PRODUCTION_ORDER.getCode(), Arrays.asList(ProductionOrderMaterielProductEnum.WAREHOUSE.getAttr(),ProductionOrderMaterielProductEnum.NUM.getAttr(),  SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), ProductionOrderMaterielProductEnum.OUTSTOCK_NUM.getAttr(),ProductionOrderMaterielProductEnum.WAIT_OUTSTOCK_NUM.getAttr(),ProductionOrderMaterielProductEnum.LOSS_RATE.getAttr(),ProductionOrderMaterielProductEnum.MEMO.getAttr()), 2),
    EXPORT_PRODUCTION_ORDER_FINISH_PRODUCT(XbbRefTypeEnum.PRODUCTION_ORDER.getCode(), Arrays.asList(ProductionOrderFinishProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(),  ProductionOrderFinishProductEnum.MEMO.getAttr()), 2),
    EXPORT_BOM_MATERIAL_PRODUCT(XbbRefTypeEnum.BOM_BILL.getCode(), Arrays.asList(BomMaterielProductEnum.NUM.getAttr(),BomMaterielProductEnum.MEMO.getAttr(),BomMaterielProductEnum.LOSS_RATE.getAttr()), 2),
    EXPORT_BOM_FINISH_PRODUCT(XbbRefTypeEnum.BOM_BILL.getCode(), Arrays.asList(BomFinishProductEnum.NUM.getAttr(),BomFinishProductEnum.MEMO.getAttr()), 2),
    EXPORT_ASSEMBLE_OUT_PRODUCT(XbbRefTypeEnum.ASSEMBLE.getCode(), Arrays.asList(AssembleProductEnum.WAREHOUSE.getAttr(),AssembleProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), AssembleProductEnum.COST.getAttr(),AssembleProductEnum.MEMO.getAttr(),AssembleProductEnum.BATCH.getAttr(),AssembleProductEnum.PRODUCE_DATE.getAttr(),AssembleProductEnum.GUARANTEE_PERIOD.getAttr(),AssembleProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_ASSEMBLE_IN_PRODUCT(XbbRefTypeEnum.ASSEMBLE.getCode(), Arrays.asList(AssembleInProductEnum.WAREHOUSE.getAttr(),AssembleInProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), AssembleInProductEnum.COST.getAttr(),AssembleInProductEnum.MEMO.getAttr(),AssembleInProductEnum.BATCH.getAttr(),AssembleInProductEnum.PRODUCE_DATE.getAttr(),AssembleInProductEnum.GUARANTEE_PERIOD.getAttr(),AssembleInProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_PURCHASE_INSTOCK_PRODUCT(XbbRefTypeEnum.PURCHASE_INSTOCK.getCode(), Arrays.asList(PurchaseInstockProductEnum.WAREHOUSE.getAttr(),PurchaseInstockProductEnum.NUM.getAttr(),  SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), PurchaseInstockProductEnum.COST.getAttr(),PurchaseInstockProductEnum.TOTAL_COST.getAttr(),PurchaseInstockProductEnum.MEMO.getAttr(),PurchaseInstockProductEnum.BATCH.getAttr(),PurchaseInstockProductEnum.PRODUCE_DATE.getAttr(),PurchaseInstockProductEnum.GUARANTEE_PERIOD.getAttr(),PurchaseInstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_REFUND_INSTOCK(XbbRefTypeEnum.REFUND_INSTOCK.getCode(), Arrays.asList(RefundInstockProductEnum.WAREHOUSE.getAttr(),RefundInstockProductEnum.NUM.getAttr(),  SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(),  RefundInstockProductEnum.PRICE.getAttr(),RefundInstockProductEnum.SUBTOTAL.getAttr(),RefundInstockProductEnum.COST.getAttr(),RefundInstockProductEnum.TOTAL_COST.getAttr(),RefundInstockProductEnum.MEMO.getAttr(),RefundInstockProductEnum.BATCH.getAttr(),RefundInstockProductEnum.PRODUCE_DATE.getAttr(),RefundInstockProductEnum.GUARANTEE_PERIOD.getAttr(),RefundInstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_OTHER_INSTOCK_PRODUCT(XbbRefTypeEnum.OTHER_INSTOCK.getCode(), Arrays.asList(InstockProductEnum.WAREHOUSE.getAttr(),InstockProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(),  InstockProductEnum.COST.getAttr(),InstockProductEnum.TOTAL_COST.getAttr(),InstockProductEnum.MEMO.getAttr(),InstockProductEnum.BATCH.getAttr(),InstockProductEnum.PRODUCE_DATE.getAttr(),InstockProductEnum.GUARANTEE_PERIOD.getAttr(),InstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_PRODUCTION_INSTOCK(XbbRefTypeEnum.PRODUCTION_INSTOCK.getCode(), Arrays.asList(ProductionInstockProductEnum.WAREHOUSE.getAttr(),ProductionInstockProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), ProductionInstockProductEnum.COST.getAttr(),ProductionInstockProductEnum.TOTAL_COST.getAttr(),ProductionInstockProductEnum.MEMO.getAttr(),ProductionInstockProductEnum.BATCH.getAttr(),ProductionInstockProductEnum.PRODUCE_DATE.getAttr(),ProductionInstockProductEnum.GUARANTEE_PERIOD.getAttr(),ProductionInstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_RETURNED_MATERIEL_INSTOCK(XbbRefTypeEnum.RETURNED_MATERIEL_INSTOCK.getCode(), Arrays.asList(ReturnedMaterielInstockProductEnum.WAREHOUSE.getAttr(),ReturnedMaterielInstockProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(),  ReturnedMaterielInstockProductEnum.COST.getAttr(),ReturnedMaterielInstockProductEnum.TOTAL_COST.getAttr(),ReturnedMaterielInstockProductEnum.STOCK.getAttr(),ReturnedMaterielInstockProductEnum.MEMO.getAttr(),ReturnedMaterielInstockProductEnum.PRODUCE_DATE.getAttr(),ReturnedMaterielInstockProductEnum.GUARANTEE_PERIOD.getAttr(),ReturnedMaterielInstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_CONTRACT_OUTSTOCK(XbbRefTypeEnum.CONTRACT_OUTSTOCK.getCode(), Arrays.asList(ContractOutstockProductEnum.WAREHOUSE.getAttr(),ContractOutstockProductEnum.NUM.getAttr(),  SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), ContractOutstockProductEnum.SELLING_PRICE.getAttr(),ContractOutstockProductEnum.SUBTOTAL.getAttr(),ContractOutstockProductEnum.COST.getAttr(),ContractOutstockProductEnum.TOTAL_COST.getAttr(),ContractOutstockProductEnum.PRICE.getAttr(),ContractOutstockProductEnum.DISCOUNT.getAttr(),ContractOutstockProductEnum.MEMO.getAttr(),ContractOutstockProductEnum.BATCH.getAttr(), ContractOutstockProductEnum.PRODUCE_DATE.getAttr(), ContractOutstockProductEnum.GUARANTEE_PERIOD.getAttr(),ContractOutstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_RETURNED_PURCHASE_OUTSTOCK(XbbRefTypeEnum.RETURNED_PURCHASE_OUTSTOCK.getCode(), Arrays.asList(ReturnedPurchaseOutstockProductEnum.WAREHOUSE.getAttr(),ReturnedPurchaseOutstockProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), ReturnedPurchaseOutstockProductEnum.COST.getAttr(),ReturnedPurchaseOutstockProductEnum.TOTAL_COST.getAttr(),ReturnedPurchaseOutstockProductEnum.MEMO.getAttr(),ReturnedPurchaseOutstockProductEnum.BATCH.getAttr(),ReturnedPurchaseOutstockProductEnum.PRODUCE_DATE.getAttr(),ReturnedPurchaseOutstockProductEnum.GUARANTEE_PERIOD.getAttr(),ReturnedPurchaseOutstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_OTHER_OUTSTOCK_PRODUCT(XbbRefTypeEnum.OTHER_OUTSTOCK.getCode(), Arrays.asList(OutstockProductEnum.WAREHOUSE.getAttr(),OutstockProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), OutstockProductEnum.COST.getAttr(),OutstockProductEnum.TOTAL_COST.getAttr(),OutstockProductEnum.MEMO.getAttr(),OutstockProductEnum.BATCH.getAttr(),OutstockProductEnum.PRODUCE_DATE.getAttr(),OutstockProductEnum.GUARANTEE_PERIOD.getAttr(),OutstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_PRODUCTION_MATERIEL_OUTSTOCK(XbbRefTypeEnum.PRODUCTION_MATERIEL_OUTSTOCK.getCode(), Arrays.asList(ProductionMaterielOutstockProductEnum.WAREHOUSE.getAttr(),ProductionMaterielOutstockProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), ProductionMaterielOutstockProductEnum.COST.getAttr(),ProductionMaterielOutstockProductEnum.TOTAL_COST.getAttr(),ProductionMaterielOutstockProductEnum.MEMO.getAttr(),ProductionMaterielOutstockProductEnum.BATCH.getAttr(),ProductionMaterielOutstockProductEnum.PRODUCE_DATE.getAttr(),ProductionMaterielOutstockProductEnum.GUARANTEE_PERIOD.getAttr(),ProductionMaterielOutstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_WORK_ORDER_OUTSTOCK(XbbRefTypeEnum.WORK_ORDER_OUTSTOCK.getCode(), Arrays.asList(WorkOrderOutstockProductEnum.WAREHOUSE.getAttr(),WorkOrderOutstockProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), WorkOrderOutstockProductEnum.COST.getAttr(),WorkOrderOutstockProductEnum.TOTAL_COST.getAttr(),WorkOrderOutstockProductEnum.MEMO.getAttr(),WorkOrderOutstockProductEnum.BATCH.getAttr(),WorkOrderOutstockProductEnum.PRODUCE_DATE.getAttr(),WorkOrderOutstockProductEnum.GUARANTEE_PERIOD.getAttr(),WorkOrderOutstockProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_INVENTORY_PRODUCT(XbbRefTypeEnum.INVENTORY.getCode(), Arrays.asList(InventoryProductEnum.NUM.getAttr(),InventoryProductEnum.STOCK.getAttr(),InventoryProductEnum.MEMO.getAttr(),InventoryProductEnum.BATCH.getAttr(),InventoryProductEnum.PRODUCE_DATE.getAttr(),InventoryProductEnum.GUARANTEE_PERIOD.getAttr(),InventoryProductEnum.EXPIRE_DATE.getAttr()), 2),
    EXPORT_TRANSFER_PRODUCT(XbbRefTypeEnum.TRANSFER.getCode(), Arrays.asList(TransferProductEnum.NUM.getAttr(), SelectProductEnum.BASIC_UNIT.getAttr(), SelectProductEnum.BASIC_UNIT_NUM.getAttr(), TransferProductEnum.OUTSTOCK_NUM.getAttr(),TransferProductEnum.INSTOCK_NUM.getAttr(),TransferProductEnum.WAIT_INSTOCK_NUM.getAttr(),TransferProductEnum.MEMO.getAttr(),TransferProductEnum.BATCH.getAttr(),TransferProductEnum.PRODUCE_DATE.getAttr(),TransferProductEnum.GUARANTEE_PERIOD.getAttr(),TransferProductEnum.EXPIRE_DATE.getAttr()), 2),
    //EXPORT_ORI_STOCK_PRODUCT(XbbRefTypeEnum.ORI_STOCK.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr()), 2),
    EXPORT_SUPPLIER_PRODUCT(XbbRefTypeEnum.SUPPLIER.getCode(), new ArrayList<>(), 2),
    EXPORT_PROMOTION_ACTIVITY_MANAGEMENT_PRODUCT(XbbRefTypeEnum.PROMOTION_ACTIVITY_MANAGEMENT.getCode(), Arrays.asList(SelectProductEnum.DISCOUNT.getAttr()), 2),
    EXPORT_COST_ADJUST(XbbRefTypeEnum.COST_ADJUST.getCode(), Arrays.asList(SelectProductEnum.PRODUCT_NO.getAttr(),SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.BATCH.getAttr(), CostAdjustProductEnum.PRODUCE_DATE.getAttr(), CostAdjustProductEnum.GUARANTEE_PERIOD.getAttr(),CostAdjustProductEnum.EXPIRE_DATE.getAttr(), CostAdjustProductEnum.ADJUST_AMOUNT.getAttr()), 2),
    EXPORT_WORK_ORDER_V2(XbbRefTypeEnum.WORK_ORDER_V2.getCode(), Arrays.asList(SelectProductEnum.PRODUCT_NO.getAttr(), SelectProductEnum.UNIT.getAttr(), SelectProductEnum.NUM.getAttr(), SelectProductEnum.PRICE.getAttr(), SelectProductEnum.SELLING_PRICE.getAttr(), SelectProductEnum.DISCOUNT.getAttr(), SelectProductEnum.SUBTOTAL.getAttr()), 2),
    EXPORT_RECEIPT_ORDER(XbbRefTypeEnum.RECEIPT_ORDER.getCode(), Arrays.asList(SelectProductEnum.PRODUCT_NO.getAttr(), SelectProductEnum.UNIT.getAttr(), SelectProductEnum.NUM.getAttr(), SelectProductEnum.PRICE.getAttr(), SelectProductEnum.SELLING_PRICE.getAttr(), SelectProductEnum.DISCOUNT.getAttr(), SelectProductEnum.SUBTOTAL.getAttr()), 2),
    //todo-leex
    EXPORT_SERVICE_PROJECT(XbbRefTypeEnum.SERVICE_PROJECT.getCode(), Arrays.asList(SelectProductEnum.PRODUCT_NO.getAttr(), SelectProductEnum.UNIT.getAttr(), SelectProductEnum.NUM.getAttr(), SelectProductEnum.PRICE.getAttr(), SelectProductEnum.SELLING_PRICE.getAttr(), SelectProductEnum.DISCOUNT.getAttr(), SelectProductEnum.SUBTOTAL.getAttr()), 2),

    /**
     * 导入相关
     */
    IMPORT_CONTRACT_PRODUCT(XbbRefTypeEnum.CONTRACT.getCode(), Arrays.asList(SelectProductEnum.DISCOUNT.getAttr(),SelectProductEnum.SELLING_PRICE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_ORDER_PRODUCT(XbbRefTypeEnum.ORDER.getCode(), Arrays.asList(SelectProductEnum.DISCOUNT.getAttr(),SelectProductEnum.SELLING_PRICE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_OPPORTUNITY_PRODUCT(XbbRefTypeEnum.SALES_OPPORTUNITY.getCode(), Arrays.asList(SelectProductEnum.DISCOUNT.getAttr(),SelectProductEnum.SELLING_PRICE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(), SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_QUOTATION_PRODUCT(XbbRefTypeEnum.QUOTATION.getCode(), Arrays.asList(SelectProductEnum.DISCOUNT.getAttr(),SelectProductEnum.SELLING_PRICE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    //IMPORT_REFUND_PRODUCT(XbbRefTypeEnum.REFUND.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr()), 1),
    IMPORT_SUPPLIER_PRODUCT(XbbRefTypeEnum.SUPPLIER.getCode(), new ArrayList<>(), 1),
    //IMPORT_RETURNED_PURCHASE_PRODUCT(XbbRefTypeEnum.RETURNED_PURCHASE.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr()), 1),
    IMPORT_PURCHASE_PRODUCT(XbbRefTypeEnum.PURCHASE.getCode(), Arrays.asList(SelectProductEnum.PRICE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_ASSEMBLE_OUT_PRODUCT(XbbRefTypeEnum.ASSEMBLE.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_ASSEMBLE_IN_PRODUCT(XbbRefTypeEnum.ASSEMBLE.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.COST.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_OTHER_INSTOCK_PRODUCT(XbbRefTypeEnum.OTHER_INSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.COST.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_PURCHASE_INSTOCK_PRODUCT(XbbRefTypeEnum.PURCHASE_INSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    //IMPORT_REFUND_INSTOCK(XbbRefTypeEnum.REFUND_INSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.COST.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr()), 1),
    //IMPORT_PRODUCTION_INSTOCK(XbbRefTypeEnum.PRODUCTION_INSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr()), 1),
    //IMPORT_RETURNED_MATERIEL_INSTOCK(XbbRefTypeEnum.RETURNED_MATERIEL_INSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.COST.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr()), 1),
    IMPORT_OTHER_OUTSTOCK_PRODUCT(XbbRefTypeEnum.OTHER_OUTSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_CONTRACT_OUTSTOCK(XbbRefTypeEnum.CONTRACT_OUTSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    //IMPORT_RETURNED_PURCHASE_OUTSTOCK(XbbRefTypeEnum.RETURNED_PURCHASE_OUTSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr()), 1),
    //IMPORT_PRODUCTION_MATERIEL_OUTSTOCK(XbbRefTypeEnum.PRODUCTION_MATERIEL_OUTSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr()), 1),
    //IMPORT_WORK_ORDER_OUTSTOCK(XbbRefTypeEnum.WORK_ORDER_OUTSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr()), 1),
    IMPORT_INVENTORY_PRODUCT(XbbRefTypeEnum.INVENTORY.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr()), 1),
    IMPORT_TRANSFER_PRODUCT(XbbRefTypeEnum.TRANSFER.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_BOM_MATERIAL_PRODUCT(XbbRefTypeEnum.BOM_BILL.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.LOSS_RATE.getAttr()), 1),
    IMPORT_BOM_FINISH_PRODUCT(XbbRefTypeEnum.BOM_BILL.getCode(), Collections.singletonList(SelectProductEnum.MEMO.getAttr()), 1),
    IMPORT_PRODUCTION_ORDER_MATERIAL_PRODUCT(XbbRefTypeEnum.PRODUCTION_ORDER.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_PRODUCTION_ORDER_FINISH_PRODUCT(XbbRefTypeEnum.PRODUCTION_ORDER.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_WORK_ORDER_PRODUCT(XbbRefTypeEnum.WORK_ORDER.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_ORI_STOCK_PRODUCT(XbbRefTypeEnum.ORI_STOCK.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr(),SelectProductEnum.UNIT.getAttr()), 1),
    IMPORT_COST_ADJUST(XbbRefTypeEnum.COST_ADJUST.getCode(), Arrays.asList(SelectProductEnum.PRODUCT_NO.getAttr(),SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.BATCH.getAttr(), CostAdjustProductEnum.PRODUCE_DATE.getAttr(), CostAdjustProductEnum.GUARANTEE_PERIOD.getAttr(), CostAdjustProductEnum.ADJUST_AMOUNT.getAttr()), 1),
    IMPORT_WORK_ORDER_V2(XbbRefTypeEnum.WORK_ORDER_V2.getCode(), Arrays.asList(SelectProductEnum.PRODUCT_NO.getAttr(), SelectProductEnum.UNIT.getAttr(), SelectProductEnum.NUM.getAttr(), SelectProductEnum.PRICE.getAttr(), SelectProductEnum.SELLING_PRICE.getAttr(), SelectProductEnum.DISCOUNT.getAttr(), SelectProductEnum.SUBTOTAL.getAttr()),1),
    IMPORT_RECEIPT_ORDER(XbbRefTypeEnum.RECEIPT_ORDER.getCode(), Arrays.asList(SelectProductEnum.PRODUCT_NO.getAttr()), 1),
    IMPORT_SERVICE_PROJECT(XbbRefTypeEnum.SERVICE_PROJECT.getCode(), Arrays.asList(SelectProductEnum.PRODUCT_NO.getAttr()), 1),

    ;

    /**
     * 业务类型
     */
    private int businessType;
    /**
     * 产品关联字段
     */
    private List<String> productEnumList;

    private Integer fromImport;


    RelativeProductImportEnum(int businessType, List<String> productEnumList, Integer fromImport) {
        this.businessType = businessType;
        this.productEnumList = productEnumList;
        this.fromImport = fromImport;
    }

    public static List<String> getByBusinessType(Integer businessType, Integer fromImport) {
        for (RelativeProductImportEnum relativeProductImportEnum : values()) {
            if (Objects.equals(relativeProductImportEnum.getBusinessType(), businessType) && Objects.equals(relativeProductImportEnum.getFromImport(), fromImport)) {
                return relativeProductImportEnum.getProductEnumList();
            }
        }
        return null;
    }

    public static List<Integer> exportProductBusinessTypeList() {
        List<Integer> businessTypeList = new ArrayList<>();
        for (RelativeProductImportEnum relativeProductImportEnum : RelativeProductImportEnum.values()) {
            if (Objects.equals(relativeProductImportEnum.getFromImport(), 2)) {
                businessTypeList.add(relativeProductImportEnum.getBusinessType());
            }
        }
        return businessTypeList;
    }
}
